API Gateway で Unauthorized が発生したが Lambda オーソライザーのログが記録されないときの対処方法
困っていた内容
API Gateway の HTTP API で、Lambda オーソライザーによる認証を設定しました。
テストリクエストを行ったところ{"message":"Unauthorized"}
が発生したので、調査のため Lambda のログを確認しましたが、ログが出力されていませんでした。
Lambda オーソライザーが原因と思いますが、確認すべき内容を教えてください。
どう対応すればいいの?
ID ソースと、クライアントがリクエストした内容を確認してください。
API Gateway は、Lambda オーソライザーの ID ソースが含まれないリクエストを受け取ると、Lambda を呼び出さず、401 Unauthorized をクライアントに返却します。
そのため、レスポンスが Unauthorized となり、Lambda のログも記録されない場合は、ID ソースに指定した値をリクエストに含めているか確認してください。
なお、リクエストしている内容は、curl コマンドの場合は-v
を追加することで確認でき、リクエストした内容をレスポンスとして返却する httpbin のようなツールでも確認できます。
postmanlabs/httpbin: HTTP Request & Response Service, written in Python + Flask.
※httpbin.orgで手軽に確認できますが、機密情報は含めないようにご注意ください。
$ curl "https://httpbin.org/get" -H "Hato-Authorization: hatoToken" { "args": {}, "headers": { "Accept": "*/*", "Hato-Authorization": "hatoToken", "Host": "httpbin.org", "User-Agent": "curl/8.1.2", "X-Amzn-Trace-Id": "Root=1-67891233-abcdef012345678912345678" }, "origin": "203.0.113.0", "url": "https://httpbin.org/get" }
参考資料
クライアントのリクエストに ID ソースが含まれていない場合、API Gateway は Lambda オーソライザーを呼び出さず、クライアントは 401 エラーを受け取ります。